package org.example.controller;

import org.example.dto.FruitWeightDTO;
import org.example.entity.Apple;
import org.example.entity.Fruit;
import org.example.entity.Mango;
import org.example.entity.Strawberry;
import org.example.service.QuestionsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;

@RestController
public class QuestionsController {

    @Autowired
    QuestionsService employeeService;

    /**
     * 1、有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。
     *    现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
     *    请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param fruitWeightDTO
     * @return
     */
    @PostMapping("price1")
    public BigDecimal price1(@RequestBody FruitWeightDTO fruitWeightDTO) {
        // 获取单价和重量
        Fruit[] fruit = new Fruit[2];
        fruit[0] = new Apple(new BigDecimal(8), fruitWeightDTO.getAppleWeight());
        fruit[1] = new Strawberry(new BigDecimal(13), fruitWeightDTO.getStrawberryWeight());
        // 计算总价格
        return employeeService.calculatePrice(fruit);
    }


    /**
     * 2、超市增加了一种水果芒果，其定价为 20 元/斤。
     *   现在顾客 B 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     *   请编写函数，对于 B 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param fruitWeightDTO
     * @return
     */
    @PostMapping("price2")
    public BigDecimal price2(@RequestBody FruitWeightDTO fruitWeightDTO) {
        // 获取单价和重量
        Fruit[] fruit = new Fruit[3];
        fruit[0] = new Apple(new BigDecimal(8), fruitWeightDTO.getAppleWeight());
        fruit[1] = new Strawberry(new BigDecimal(13), fruitWeightDTO.getStrawberryWeight());
        fruit[2] = new Mango(new BigDecimal(20), fruitWeightDTO.getMangoWeight());
        // 计算总价格
        return employeeService.calculatePrice(fruit);
    }


    /**
     * 3、超市做促销活动，草莓限时打 8 折。
     *   现在顾客 C 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     *   请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param fruitWeightDTO
     * @return
     */
    @PostMapping("price3")
    public BigDecimal price3(@RequestBody FruitWeightDTO fruitWeightDTO) {
        // 获取单价和重量
        Fruit[] fruit = new Fruit[3];
        fruit[0] = new Apple(new BigDecimal(8), fruitWeightDTO.getAppleWeight());
        fruit[1] = new Strawberry(BigDecimal.valueOf(13 * 0.8), fruitWeightDTO.getStrawberryWeight());
        fruit[2] = new Mango(new BigDecimal(20), fruitWeightDTO.getMangoWeight());
        // 计算总价格
        return employeeService.calculatePrice(fruit);
    }

    /**
     * 4、促销活动效果明显，超市继续加大促销力度，购物满 100 减 10 块。
     *   现在顾客 D 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     *   请编写函数，对于 D 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param fruitWeightDTO
     * @return
     */
    @PostMapping("price4")
    public BigDecimal price4(@RequestBody FruitWeightDTO fruitWeightDTO) {
        // 获取单价和重量
        Fruit[] fruit = new Fruit[3];
        fruit[0] = new Apple(new BigDecimal(8), fruitWeightDTO.getAppleWeight());
        fruit[1] = new Strawberry(BigDecimal.valueOf(13 * 0.8), fruitWeightDTO.getStrawberryWeight());
        fruit[2] = new Mango(new BigDecimal(20), fruitWeightDTO.getMangoWeight());
        // 计算总价格
        BigDecimal totalPrice = employeeService.calculatePrice(fruit);
        // 判断是否大于100
        return (totalPrice.compareTo(BigDecimal.valueOf(100)) >= 0) ? totalPrice.subtract(new BigDecimal(10)) : totalPrice;
    }
}
